package com.anhry.www.safety.util.service;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.anhry.www.safety.util.Param;

public interface UtilService {
	
	/**
	 * 保存
	 * @param obj 实体类对象
	 * @throws Exception
	 */
	public abstract void save(Object obj) throws Exception;
	
	/**
	 * 保存或修改对象
	 * @param obj
	 * @throws Exception
	 */
	public abstract void saveOrUpdate(Object obj) throws Exception;
	/**
	 * 修改
	 * @param obj 实体类对象
	 * @throws Exception
	 */
	public abstract void update(Object obj) throws Exception;
	/**
	 * 删除
	 * @param obj 实体类对象
	 * @throws Exception
	 */
	public abstract void delete(Object obj) throws Exception;

	/**
	 * 根据ID查询对象
	 * @param classes 实体类
	 * @param id　字符串
	 * @return
	 * @throws Exception
	 */
	public abstract Object getObjectById(Class classes,String id) throws Exception;
	/**
	 * 根据ID查询对象
	 * @param classes 实体类
	 * @param id　int
	 * @return
	 * @throws Exception
	 */
	public abstract Object getObjectById(Class classes,int id) throws Exception;
	/**
	 * 根据ID查询对象
	 * @param classes 实体类
	 * @param id　long
	 * @return
	 * @throws Exception
	 */
	public abstract Object getObjectById(Class classes,Long id) throws Exception;
	
	/**
	 * 
	 * @param objName 要查询的类(表)
	 * @param params Vector参数Param对象集合
	 * @param orders Map排序 	
	 * @param start int 起始数
	 * @param count	int 页大小
	 * @return
	 */
	public abstract Object getCollection(String objName, List<Param> params, Map orders,int start, int count)throws Exception;
	/**
	 * 用hql语句查询所有记录
	 * @param hql
	 * @return
	 */
	public abstract Object getHqlQuery(String hql)throws Exception;
	/**
	 * 用hql语句分页查询
	 * @param hql
	 * @param start 起始数
	 * @param count 页大小
	 * @return
	 */		
	public abstract Collection getHqlQuery(String hql,int start,int count)throws Exception;
	
	/**
	 * 查询总记录数
	 * @param hql
	 * @return int
	 * @throws Exception
	 */
	public abstract int getHqlQuerySize(String hql) throws Exception;
	
	/**
	 * 按条件删除对象
	 * @param objName 对象名
	 * @param params 删除条件集合(Param ArrayList)
	 * @throws Exception
	 */
	public void deleteAll(String objName, List<Param> params) throws Exception;
	
	/**
	 * 按条件更新对象
	 * @param objName 对象名
	 * @param sets	要更新的字段
	 * @param paramList 条件集合
	 * @throws Exception
	 */
	public void updateAll(String objName,Map sets, List<Param> paramList) throws Exception;
	
	/**
	 * 根据表取得附件（只对网站部分的附件信息有效）
	 * @param classes
	 * @param id
	 * @return
	 * @throws Exception
	 */
	public List getFjList(String classes,String id)throws Exception; 
	
	/**
	 * 执行sql语句（包括delete，update语句）
	 * @param sql
	 * @throws Exception
	 */
	public void deleteBySql(String sql)throws Exception;
	
	/**
	 * @author ZJB
	 * sql 根据sql查询
	 * @param hql
	 * @param start 起始数
	 * @param count 页大小
	 * @return
	 */	
	public List getObjectBySql(String sql,int start,int count) throws Exception;
	
	/**
	 * 根据sql取得数据count
	 * @param sql
	 * @return
	 * @throws Exception
	 */
	public String getObjectBySql(String sql)throws Exception;
	
	public <T> T getObject(Class<T> clazz, String ID) throws Exception;
	
	/**
	 * 取得数据列表
	 * @param table 表
	 * @param hql	查询语句
	 * @param order	排序语句
	 * @param start
	 * @param count
	 * @return
	 * @throws Exception
	 */
	public List getObjecList(String table,String hql,String order,int start, int count)throws Exception;
	
	
}
